在軟體開發的世界中,日誌就像是應用程式的「黑盒子」,記錄著程式運行的每一個重要時刻。特別是在跨平台應用中,完善的日誌系統不僅是除錯的利器,更是了解使用者行為、監控應用程式健康狀態的重要工具。今天我們將深入探討如何在 Tauri 2.0 中建立一套專業的日誌記錄系統。
在桌面應用程式的開發過程中,開發者往往專注於功能實作,而忽略了日誌的重要性。然而,當應用程式發布到生產環境後,日誌就成了開發者與使用者之間溝通的重要橋樑。透過日誌,我們可以:
Tauri 2.0 採用了全新的插件系統,安裝日誌功能變得更加簡單。只需在專案根目錄執行:
npm run tauri add log
這個命令會自動完成所有必要的設定,包括在 Cargo.toml
中加入依賴,在 main.rs
中初始化插件,以及在權限檔案中加入必要的權限設定。
在 src-tauri/src/main.rs
中,插件會自動加入初始化代碼:
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_log::Builder::new().build())
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
在你的 Command 函式中,就可以開始使用日誌了:
#[tauri::command]
fn process_data(data: String) -> Result<String, String> {
log::info!("開始處理資料: {}", data);
// 處理邏輯
if data.is_empty() {
log::warn!("收到空白資料");
return Err("資料不能為空".to_string());
}
log::debug!("資料處理完成,長度: {}", data.len());
Ok(format!("處理完成: {}", data))
}
會在 terminal 看到這樣輸出:
[2025-10-07][14:49:45][ithome_ironman_2025_tauri_lib][INFO] 開始處理資料:
[2025-10-07][14:49:45][ithome_ironman_2025_tauri_lib][WARN] 收到空白資料
在 JavaScript 前端中,你可以使用 @tauri-apps/plugin-log
的前端 API:
import { info, warn, error } from '@tauri-apps/plugin-log';
const testLog = async () => {
await info('使用者點擊了測試按鈕');
try {
// 一些可能失敗的操作
throw new Error('模擬錯誤');
} catch (err) {
await error(`發生錯誤: ${err.message}`);
}
};
會在 terminal 看到這樣輸出:
[2025-10-07][14:52:05][webview:testLog@http://localhost:1420/src/views/MainView.vue?t=1759848725346:18:13][INFO] 使用者點擊了測試按鈕
[2025-10-07][14:52:05][webview:testLog@http://localhost:1420/src/views/MainView.vue?t=1759848725346:22:15][ERROR] 發生錯誤: 模擬錯誤
Tauri 會根據不同作業系統,將日誌檔案儲存在適當的位置:
%LOCALAPPDATA%\{bundleIdentifier}\logs\
~/Library/Logs/{bundleIdentifier}\
~/.local/share/{bundleIdentifier}/logs/
/data/data/{bundleIdentifier}/files/logs/
不論是測試或是安裝後執行,都是存在這個位置。
如果大家剛剛有仔細看 Log 內容的話,會發現他有紀錄日期時間。預設是使用 UTC 時區 (所以並不是我在白天上班寫文章),如果想改用 local 時區的話可以這樣設定:
tauri_plugin_log::Builder::new()
.timezone_strategy(tauri_plugin_log::TimezoneStrategy::UseLocal)
.build()
預設格式是 DATE[TARGET][LEVEL] MESSAGE
,可以使用 format
來調整格式,例如:
use chrono::Local;
tauri_plugin_log::Builder::new()
.format(|out, message, record| {
let now = Local::now();
out.finish(format_args!(
"{} | {} | {}:{} | {}",
now.format("%Y-%m-%d %H:%M:%S%.3f"),
record.level(),
record.target(),
record.line().unwrap_or_default(),
message
))
})
.build()
日誌就變成這個樣子了:
2025-10-07 23:17:31.598 | INFO | ithome_ironman_2025_tauri_lib:8 | 開始處理資料: 王大明
2025-10-07 23:17:31.598 | DEBUG | ithome_ironman_2025_tauri_lib:16 | 資料處理完成,長度: 9
有時候,在不同情況下需要使用不同的 Log Level,如果不想要記錄低於 INFO
層級的日誌的話,可以這樣設定:
tauri_plugin_log::Builder::new()
.level(log::LevelFilter::Info)
.build()
在開發模式下,日誌會同時輸出到終端機和檔案,方便即時查看。而在生產環境中,日誌主要寫入檔案,並可以設定不同的日誌等級來控制輸出的詳細程度。
今天我們深入了解了 Tauri 2.0 的日誌系統,主要學習了以下幾個重點:
npm run tauri add log
一鍵安裝日誌插件log::info!
) 和 JavaScript 前端 (info()
) 日誌記錄完善的日誌系統是專業應用程式不可或缺的一部分。Tauri 2.0 的日誌插件提供了簡單易用且功能強大的日誌解決方案,讓開發者能夠輕鬆實作從開發到生產的完整日誌記錄。透過合理使用日誌,我們不僅能提高開發效率,更能提升應用程式的可維護性和使用者體驗。